#include <stdlib.h>
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <string.h>
#include <errno.h>
#include <glib.h>
#include <time.h>
 #include <locale.h>

#define TAILLEBUF 100
#define FICHIERIMAGE "vuillemin.jpg"

int OuvreRapport(const char *employe) {
  int res, r;
  FILE *f;
  GString *s = NULL;
  struct stat st;
  
  res = stat(employe, &st);
  if (res == -1) {
    perror("problème à l'ouverture du répertoire");
    return -1;
  }
  if (!(S_ISDIR(st.st_mode))) {
    fprintf(stderr,
	    "problème car '%s' existe mais n'est pas un répertoire\n",
	    employe);
    return -1;
  }
  
  s = g_string_new(employe);
  g_string_append(s, "/");
  g_string_append(s, employe);
  g_string_append(s, ".tex");

  res = open(s->str, O_RDONLY);
  if (res == -1) {
    fprintf(stderr, "problème à l'ouverture du fichier %s\n",
	    s->str);
    perror("");
    return -1;
  }
  close(res);
  g_string_free(s, TRUE);

  res = open(FICHIERIMAGE, O_RDONLY);
  if (res == -1) {
    fprintf(stderr, "problème à l'ouverture du fichier image %s\n",
	    FICHIERIMAGE);
    perror("");
    return -1;
  }
  close(res);
  
  s = g_string_new(employe);
  g_string_append(s, "/temp.tex");

  f = fopen(s->str, "w");
  g_string_free(s, TRUE);
  
  fprintf(f, "\\documentclass{article}\n\\usepackage[utf8x]{inputenc}\n\\usepackage[frenchb]{babel}\n\\usepackage{graphics,graphicx}\n");
  fprintf(f, "\\title{Rapport d'activité}\n\\date{Université Claude Bernard Lyon 1\\\\ \\mbox{}\\\\ \\mbox{}\\\\\\includegraphics[width=13cm]{../vuillemin.jpg}}\n");
  fprintf(f, "\\author{%s}", employe);
  fprintf(f, "\\begin{document}\n\\maketitle\n\\newpage\n");
  fprintf(f, "\\include{%s}\n", employe);
  fprintf(f, "\\end{document}\n");
  fclose(f);
  
  s = g_string_new("cd ");
  g_string_append(s, employe);
  g_string_append(s, "/; pdflatex temp.tex");
  system(s->str);
  g_string_free(s, TRUE);
  
  s = g_string_new(employe);
  g_string_append(s, "/temp.pdf");
  
  r = open(s->str, O_RDONLY);
  if (r < 0) {
    fprintf(stderr, "problème à l'ouverture du fichier pdf %s\n",
	    s->str);
    perror("");
    return -1;
  }
  g_string_free(s, TRUE);
  
  return r;
}

int Ecrit(const char *message, const char *employe) {
  FILE *f;
  int res;
  struct stat st; 
  time_t t;
  struct tm *tmp;
  char buff[TAILLEBUF];
  GString *s = NULL;


  if (setlocale(LC_ALL, "fr_FR.UTF_8")==NULL) {
    perror("probleme avec setlocal fr_FR.UTF_8");
    if (setlocale(LC_ALL, "fr_FR")==NULL) {
      perror("probleme avec setlocal fr_FR");
      return -1;
    }
  }

  if (strlen(employe) >= 20) {
    fprintf(stderr, "Le nom de l'employé est trop long : %s\n", employe);
    return -1;
  }

  res = stat(employe, &st);
  if (res == -1) {
    if (errno == ENOENT) { // le répertoire n'existe pas
      res = mkdir(employe, S_IRWXU|S_IRGRP|S_IXGRP|S_IROTH|S_IXOTH);
      if (res == -1) {
	perror("problème à la création du répertoire");
	return -1;
      }
    } else {
      perror("problème à l'ouverture du répertoire");
      return -1;
    }
  } else {
    if (!(S_ISDIR(st.st_mode))) {
      fprintf(stderr, "problème car '%s' existe déja mais n'est pas un répertoire\n", employe);
      return -1;
    }
  }

  s = g_string_new(employe);
  g_string_append(s, "/");
  g_string_append(s, employe);
  g_string_append(s, ".tex");

  f = fopen(s->str, "a+");
  
  // calcul du temps
  t = time(NULL);
  tmp = localtime(&t);
  if (tmp == NULL) {
    perror("problème avec localtime : ");
    exit(-1);
  }

  //  titre = g_string_new("\n\section{");
  res = strftime(buff, TAILLEBUF, "\n\\section{%A %e %B %Y %Hh %Mmin %Ss}\n",tmp);
  if (res == 0) {
    perror("probleme avec strftime : ");
    return -1;
  }

  fprintf(f, "%s\n", buff);
  fprintf(f, "%s\n", message);
  
  g_string_free(s, TRUE);
  fclose(f);
  return 0;
}

int main_test(int argc, char *argv[]){
  int fd, fd2, res;
  char buff[100];

  Ecrit("plop21", "test");
  Ecrit("plop2", "test");
  Ecrit("plop3", "test");
  Ecrit("plop4", "test");
  Ecrit("plop5", "test");

  
  fd = OuvreRapport("test");
  fd2 = open("recup.pdf", O_WRONLY|O_CREAT|O_TRUNC,
	     S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH);
  if (fd2 == -1) {
    perror("probleme à l'ouverture du fichier");
    exit(1);
  }
  while ((res = read(fd, buff, 100))>0) {
    write(fd2, buff, res);
  }

  return 0;
} 
